# 导入深度学习相关库
import tensorflow as tf        # Google开发的深度学习框架
from tensorflow import keras   # TensorFlow的高级API接口
import numpy as np             # 数值计算库，用于处理数组数据

def build_neural_network():
    """构建神经网络示例 - 展示使用Keras构建深度学习模型的基本流程"""

    # 创建简单的神经网络模型
    # 使用Sequential模型，按顺序堆叠各层
    model = keras.Sequential([
        # 第一个隐藏层：全连接层(Dense)
        # 128个神经元，ReLU激活函数，输入维度784(如MNIST图像展平后的维度)
        keras.layers.Dense(128, activation='relu', input_shape=(784,), name='hidden_layer_1'),

        # Dropout层：防止过拟合，随机将20%的神经元输出设为0
        keras.layers.Dropout(0.2, name='dropout_1'),

        # 第二个隐藏层：64个神经元的全连接层
        keras.layers.Dense(64, activation='relu', name='hidden_layer_2'),

        # 第二个Dropout层
        keras.layers.Dropout(0.2, name='dropout_2'),

        # 输出层：10个神经元(对应10个类别)，使用Softmax激活函数输出概率分布
        keras.layers.Dense(10, activation='softmax', name='output_layer')
    ])

    # 编译模型 - 配置训练过程的参数
    model.compile(
        optimizer='adam',                    # 优化器：Adam自适应学习率优化算法
        loss='sparse_categorical_crossentropy',  # 损失函数：稀疏分类交叉熵(适用于整数标签)
        metrics=['accuracy']                 # 评估指标：准确率
    )

    print("=== 模型结构 ===")
    # 显示模型的详细结构信息，包括每层的参数数量
    model.summary()

    # 创建示例训练数据
    # X_sample: 100个样本，每个样本784个特征的随机数据
    X_sample = np.random.random((100, 784))  # 生成0-1之间的随机数
    # y_sample: 100个标签，每个标签是0-9之间的随机整数
    y_sample = np.random.randint(0, 10, 100)  # 生成随机整数标签

    print(f"\n=== 示例数据 ===")
    print(f"输入数据形状: {X_sample.shape}")   # 显示输入数据维度
    print(f"标签数据形状: {y_sample.shape}")   # 显示标签数据维度

    # 模拟训练过程（仅用于演示）
    print("\n=== 开始训练 ===")
    # 使用fit方法训练模型
    # epochs: 训练轮数, batch_size: 批次大小, verbose: 显示训练进度(1=显示进度条)
    history = model.fit(X_sample, y_sample, epochs=3, batch_size=32, verbose=1)

    print("\n=== 训练完成 ===")
    # 从训练历史中获取最后的损失值和准确率
    print("最终损失:", history.history['loss'][-1])      # 最后一轮的训练损失
    print("最终准确率:", history.history['accuracy'][-1]) # 最后一轮的训练准确率

# 程序入口点 - 当直接运行此脚本时执行神经网络构建函数
if __name__ == "__main__":
    build_neural_network()
